package com.ithuameng.admin.app.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ithuameng.admin.app.system.model.SysJob;
import com.ithuameng.admin.app.system.model.admin.dto.SysJobDto;
import org.quartz.SchedulerException;

import java.util.List;

/**
 * SysJob Service
 *
 * @author ithuameng
 */
public interface ISysJobService extends IService<SysJob> {

    /**
     * 任务调度初始化
     *
     * @throws SchedulerException Scheduler异常
     */
    void init() throws SchedulerException;

    IPage<SysJob> search(IPage<SysJob> page, SysJobDto sysJobDto);

    /**
     * 根据任务类名称查询任务
     *
     * @param jobClassName 任务类名称
     * @return 匹配的任务列表
     */
    List<SysJob> findByJobClassName(String jobClassName);

    /**
     * 保存和启动定时任务
     *
     * @param sysJob ignore
     * @return ignore
     */
    boolean saveAndScheduleJob(SysJob sysJob);

    /**
     * 执行定时任务
     *
     * @param id        任务编号
     * @param parameter 任务参数
     * @return 是否成功
     */
    boolean run(String id, String parameter);

    /**
     * 暂停任务
     *
     * @param id 任务编号
     * @return 是否成功
     */
    boolean pauseJob(String id);

    /**
     * 恢复定时任务
     *
     * @param id ignore
     * @return ignore
     */
    boolean resumeJob(String id);

    /**
     * 编辑和启停定时任务
     *
     * @param sysJob ignore
     * @return ignore
     */
    boolean editAndScheduleJob(SysJob sysJob);

    /**
     * 删除和停止删除定时任务
     *
     * @param id 任务编号
     * @return 是否删除成功
     */
    boolean deleteAndStopJob(String id);

    /**
     * 批量停止删除定时任务
     *
     * @param ids 任务编号集合
     */
    void deleteAndStopJobBatch(String... ids);

    /**
     * 启动所有定时任务
     *
     * @throws SchedulerException Quartz异常
     */
    void startAllJob() throws SchedulerException;

    /**
     * 暂停所有定时任务
     *
     * @throws SchedulerException Quartz异常
     */
    void pauseAllJob() throws SchedulerException;
}
